#include <future>
#include <iostream>
#include <chrono>
#include <thread>
#include <memory>
using namespace std;
// 为什么不传普通类型指针？线程分离的，不知道什么时候处理完成业务
// packaged是任务包装器,配合智能指针使用

int add(int num1, int num2)
{
    std::cout << "加法" << endl;
    std::this_thread::sleep_for(std::chrono::seconds(5));

    return num1 + num2;
}

int main()
{
    // 不能直接传递任务包装函数
    auto task_ptr = std::make_shared<std::packaged_task<int(int, int)>>(add);
    future<int> futu = task_ptr->get_future(); // 建立关联

    std::cout << "--------------" << endl;
    // 线程调用
    std::thread task_thread([task_ptr]()
                            { (*task_ptr)(10, 20); });

    cout<<"--------"<<std::endl;
    std::cout << futu.get() << endl;
    task_thread.join();
    return 0;
}